Wszystkie obiekty w programie mają nazwę obiektu, która jednoznacznie identyfikuje je w obrębie danego dokumentu.
Informacje te dotyczą wszystkich obiektów pochodnych od App: Obiektu dokumentu (klasa App::DocumentObject
), która zasadniczo obejmuje wszystkie obiekty, które można utworzyć w dokumencie.
Nazwy mają różne właściwości:
Nazwa
może zawierać tylko proste znaki alfanumeryczne i znak podkreślenia, [_0-9a-zA-Z]
.Nazwa
nie może zaczynać się od cyfry, musi zaczynać się od litery lub podkreślenia, [_a-zA-Z]
.Nazwa
jest przypisywana w czasie tworzenia obiektu, później nie można jej już edytować. Nigdy nie można zmienić nazwy obiektu.Nazwa
musi być unikalna w całym dokumencie. Nie ma znaczenia, czy dwa obiekty są zupełnie różnych typów, na przykład jeden to kieszeń środowiska Projekt Części, a drugi to ściana środowiska Architektura. Muszą one mieć różne nazwy.Sześcian
, Sześcian001
, Sześcian002
itd. Zapobiega to kolizji nazw.Nazwa
staje się dostępna do użycia przez nowo utworzony obiekt. Oznacza to, że jeśli istnieją obiekty Sześcian
, Sześcian001
i Sześcian002
, a my usuniemy pierwszy z nich, to następnym obiektem utworzonym za pomocą Part Box nie będzie Sześcian003
, lecz Sześcian
, ponieważ ciąg ten jest dostępny do ponownego użycia. Zauważ, że nie jest możliwa zmiana nazwy obiektu Sześcian001
lub Sześcian002
na Sześcian
, ponieważ ich nazwy są niezmienne.Podsumowując, Nazwa
zasadniczo działa jak unikalny identyfikator (UID) dla obiektu. Ponieważ unikalna Nazwa
jest bardzo restrykcyjna, wszystkie obiekty mają również właściwość Etykieta
, która umożliwia "zmianę nazwy" obiektu na coś bardziej opisowego. Wewnętrzna Nazwa
faktycznie pozostaje stała, ale edytowalna przez użytkownika Etykieta
może być używana w większości sytuacji, w których użyto by Nazwy
. W powszechnym użyciu w programie i dokumentacji "zmiana nazwy" oznacza zmianę Etykiety
, a nie rzeczywistej Nazwy
obiektu.
Istnieją różne właściwości etykiet:
Etykieta
może akceptować dowolny ciąg UTF8, w tym znaki akcentu i spacji.Etykieta
obiektu, a nie jego Nazwa
. Dlatego za każdym razem, gdy tworzony jest nowy obiekt, dobrą praktyką jest zmiana Etykiety
na bardziej opisowy ciąg znaków. Aby zmienić nazwę (etykietę) obiektu, wybierz ją w widoku drzewa i naciśnij F2 (lub raczej Return na macOS) lub otwórz menu podręczne (kliknij prawym przyciskiem myszy) i wybierz Zmień nazę.NamNazwae
będzie nadal wyświetlana w wielu miejscach, na przykład na pasku pasek stanu lub w oknie widok wyboru, gdy obiekt jest zaznaczony.Nazwy
, wiele okien dialogowych wyświetli najpierw Nazwę
, a następnie edytowalną przez użytkownika Etykietę
w nawiasach, na przykład Sześcian (Element wyciągany)
.Etykieta
jest unikalna, podobnie jak Nazwa
. Zachowanie to można jednak zmienić w edytorze preferencji, Edycja → Preferencje ... → Ogólne → Dokument → Zezwalaj na umieszczanie duplikatów etykiet obiektów w obrębie jednego dokumentu. Oznacza to, że generalnie Etykieta
nie jest unikalna w dokumencie i może się powtarzać. Zaleca się jednak zachowanie unikalności Etykiet
, ponieważ jest to prawdopodobnie najbardziej przydatne do identyfikacji różnych obiektów. Podczas pisania niestandardowych funkcji, które manipulują obiektami, metody powinny używać Nazwy
obiektu, a nie jego Etykiety
, aby zagwarantować, że używany jest właściwy obiekt.<<Custom Label With Spaces>>.Height
<<Label may use UTF8 characters>>.Width
Jest to prosty ciąg znaków, który może zawierać dowolny tekst, a zatem może być używany do dokumentowania (opisywania z większą ilością szczegółów) utworzonego obiektu.
Etykieta2
z poziomu Konsoli Python.
Zobacz również: Podstawy tworzenia skryptów FreeCAD, oraz Obiekty skryptowe.
Każdy obiekt w oprogramowaniu jest tworzony wewnętrznie za pomocą metody addObject()
dokumentu. Większość obiektów 2D i 3D, które użytkownik zobaczy w oknie widoku 3D pochodzi z Część: Cecha. W poniższym przykładzie utworzony obiekt to Sześcian środowiska pracy Część.
import FreeCAD as App
doc = App.newDocument()
obj = doc.addObject("Part::Box", "Name")
obj.Label = "Custom label"
Funkcja addObject
posiada dwa podstawowe argumenty typu string.
"Part::Box"
.Name
. Jeśli nie zostanie on podany, domyślnie przyjmuje taką samą nazwę jak klasa obiektu, czyli "Part__Box"
, gdzie dwa nieprawidłowe symbole, dwukropki ::
, są zastąpione dwoma podkreśleniami __
.
Name
może zawierać tylko podstawowe znaki alfanumeryczne i znak podkreślenia, [_0-9a-zA-Z]
. Jeśli podane zostaną inne symbole, zostaną one przekonwertowane na znak podkreślenia. Na przykład "A+B:C*"
zostanie przekonwertowane na "A_B_C_"
.Name
nie może zaczynać się od liczby, musi zaczynać się od litery lub podkreślenia, [_a-zA-Z]
. Na przykład "123ABC"
jest konwertowany na "_23ABC"
.Name
jest ustalany w momencie utworzenia, nie można go później zmodyfikować.Name
musi być unikalny w całym dokumencie. Jeśli użyty zostanie ten sam obiekt "Name"
, automatycznie dołączony zostanie kolejny numer, tak aby wynikowe nazwy były unikalne; na przykład, jeśli "Name"
już istnieje, nowe obiekty zostaną nazwane "Name001"
, "Name002"
, "Name003"
itd.
Obiekt Label
jest właściwością utworzonego obiektu i może zostać zmieniony na bardziej znaczący tekst.
Label
ma taką samą wartość jak Name
.Name
, Label
może akceptować dowolny ciąg UTF8, łącznie ze znakami akcentówi i spacji.Label
można zmienić w dowolnym momencie, po prostu przypisując żądany ciąg znaków, obj.Label = "New label"
.
Wszystkie obiekty w dokumencie są atrybutami danych odpowiedniego obiektu Dokument. Nazwa atrybutu odpowiada wewnętrznej Nazwie
obiektu.
import FreeCAD as App
obj1 = App.ActiveDocument.Box
obj2 = App.ActiveDocument.Box001
obj3 = App.ActiveDocument.Box002
Jest to równoważne użyciu metody getObject
dokumentu.
import FreeCAD as App
obj1 = App.ActiveDocument.getObject('Box')
obj2 = App.ActiveDocument.getObject('Box001')
obj3 = App.ActiveDocument.getObject('Box002')
Możliwe jest jednak również pobranie obiektu za pomocą bardziej opisowego identyfikatora Label
.
import FreeCAD as App
obj1 = App.ActiveDocument.getObjectsByLabel("Concrete wall")[0]
obj2 = App.ActiveDocument.getObjectsByLabel("Custom parallelepiped")[0]
obj3 = App.ActiveDocument.getObjectsByLabel("Some special name for this cube__002")[0]
Biorąc pod uwagę, że obiekt Label
nie jest unikalny, metoda getObjectsByLabel
zwraca listę wszystkich obiektów znalezionych z tym obiektem Label
. Jeśli jednak Label
jest unikalny w dokumencie, to pierwszym elementem tej listy powinien być żądany obiekt.